import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.*;
import java.util.*;

//JDBC
public class Main {
    public static void main1(String[] args) throws SQLException {

        Scanner in = new Scanner(System.in);

        //1.创建数据源
         DataSource dataSource = new MysqlDataSource();//向上转型
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java118?characterEncoding=utf8&useSSL=false");//向下转型
        //连接用户:默认是管理员用户
        ((MysqlDataSource)dataSource).setUser("root");
        //数据库密码
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.数据库和服务器连接:需要处理异常:alt + shift + enter
        Connection connection = dataSource.getConnection();

        //3.创建sql语句:数据库是不认识字符串的，需要将字符串通过语句类转为对象
        //通过jdbc发生给数据库，数据库执行指令

        //用户操作
        System.out.print("请输入学号:");
        int id = Integer.parseInt(in.nextLine());
        System.out.print("请输入姓名:");
        String name = in.nextLine();


        String sql = "insert into student value(?,?)";//？占位符
        //Statement stateMent = connection.prepareStatement(sql);
        //设置学号和姓名
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);//占位符的位置
        statement.setString(2,name);//占位符的位置

        //4.执行语句：将sql语句发生给mysql数据库执行
        int n = statement.executeUpdate();//影响了几行

        System.out.println("n = " + n);

        //5.回收资源
        statement.close();
        connection.close();
    }

    //查询语句
    public static void main2(String[] args) throws SQLException {
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        //定位使用的数据库
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java118?characterEncoding=utf8&useSSl=false");
        //数据库使用者
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.连接数据库:处理异常
        Connection connection = dataSource.getConnection();

        //3.创建查询语句
        String sql = "select* from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.获取结果集合
        ResultSet resultSet = statement.executeQuery();

        //5.遍历结果集合
        while(resultSet.next()){
            int id = resultSet.getInt("id");
            System.out.print("id = " + id + " ");
            String name = resultSet.getString("name");
            System.out.println("name = " + name);
        }

        //6.回收资源
        resultSet.close();
        statement.close();
        connection.close();
    }

    //修改
    public static void main3(String[] args) throws SQLException {

        Scanner in = new Scanner(System.in);

        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();//向上转型
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java118?characterEncoding=utf8&useSSL=false");//向下转型
        //连接用户:默认是管理员用户
        ((MysqlDataSource)dataSource).setUser("root");
        //数据库密码
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.数据库和服务器连接:需要处理异常:alt + shift + enter
        Connection connection = dataSource.getConnection();

        //3.创建sql语句:数据库是不认识字符串的，需要将字符串通过语句类转为对象
        //通过jdbc发生给数据库，数据库执行指令

        //用户操作
        System.out.print("请输入学号:");
        int id = Integer.parseInt(in.nextLine());
        System.out.print("请输入姓名:");
        String name = in.nextLine();


        String sql = "update student set name = ? where id = ?";//？占位符
        //Statement stateMent = connection.prepareStatement(sql);
        //设置学号和姓名
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);//占位符的位置
        statement.setInt(2,id);//占位符的位置

        //4.执行语句：将sql语句发生给mysql数据库执行
        int n = statement.executeUpdate();//影响了几行

        System.out.println("n = " + n);

        //5.回收资源
        statement.close();
        connection.close();
    }

    //删除
    public static void main4(String[] args) throws SQLException {

        Scanner in = new Scanner(System.in);

        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();//向上转型
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java118?characterEncoding=utf8&useSSL=false");//向下转型
        //连接用户:默认是管理员用户
        ((MysqlDataSource)dataSource).setUser("root");
        //数据库密码
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.数据库和服务器连接:需要处理异常:alt + shift + enter
        Connection connection = dataSource.getConnection();

        //3.创建sql语句:数据库是不认识字符串的，需要将字符串通过语句类转为对象
        //通过jdbc发生给数据库，数据库执行指令

        //用户操作
        System.out.print("请输入学号:");
        int id = Integer.parseInt(in.nextLine());
        System.out.print("请输入姓名:");
        String name = in.nextLine();


        String sql = "delete from student where name = ? and id = ?";//？占位符
        //Statement stateMent = connection.prepareStatement(sql);
        //Statement stateMent = connection.prepareStatement(sql);
        //设置学号和姓名
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);//占位符的位置
        statement.setInt(2,id);//占位符的位置


        //4.执行语句：将sql语句发生给mysql数据库执行
        int n = statement.executeUpdate();//影响了几行

        System.out.println("n = " + n);

        //5.回收资源
        statement.close();
        connection.close();
    }

    //删除表
    public static void main(String[] args) throws SQLException {

        Scanner in = new Scanner(System.in);

        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();//向上转型
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java118?characterEncoding=utf8&useSSL=false");//向下转型
        //连接用户:默认是管理员用户
        ((MysqlDataSource)dataSource).setUser("root");
        //数据库密码
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.数据库和服务器连接:需要处理异常:alt + shift + enter
        Connection connection = dataSource.getConnection();

        //3.创建sql语句:数据库是不认识字符串的，需要将字符串通过语句类转为对象
        //通过jdbc发生给数据库，数据库执行指令

        //用户操作
        System.out.print("请输入需要删除的表名:");
        String table_name = in.nextLine();

        if(!table_name.matches("^[a-zA-Z0-9_]+$")){
            System.out.println("非法输入！！！");
            return;
        }

        Set<String> allowedTables = new HashSet<>(Arrays.asList("student", "teacher", "class"));
        if(!allowedTables.contains(table_name)){
            System.out.println("非管理员不可删除！");
            return;
        }


        String sql = "drop table " + table_name;//？占位符
        Statement statement = connection.createStatement();

        //4.执行语句：将sql语句发生给mysql数据库执行
        int n = statement.executeUpdate(sql);//影响了几行

        System.out.println("n = " + n);

        //5.回收资源
        statement.close();
        connection.close();
    }



}